package com.hait.mypicture.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hait.mypicture.model.dto.space.analyze.*;
import com.hait.mypicture.model.entity.Space;
import com.hait.mypicture.model.entity.User;
import com.hait.mypicture.model.vo.space.analyze.*;

import java.util.List;

/**
 * @author DELL
 * @description 针对表【space(空间)】的数据库操作Service
 * @createDate 2025-08-15 19:51:35
 */
public interface SpaceAnalyzeService extends IService<Space> {

    /**
     * 分析空间使用情况
     *
     * @param spaceAnalyzeRequest 空间分析请求
     * @param loginUser           登录用户
     * @return 空间分析结果
     */
    SpaceUsageAnalyzeResponse analyzeSpaceUsage(SpaceAnalyzeRequest spaceAnalyzeRequest, User loginUser);

    /**
     * 分析空间分类情况
     *
     * @param spaceCategoryAnalyzeRequest 空间分类分析请求
     * @param loginUser                   登录用户
     * @return 空间分类分析结果
     */
    List<SpaceCategoryAnalyzeResponse> analyzeSpaceCategory(SpaceCategoryAnalyzeRequest spaceCategoryAnalyzeRequest, User loginUser);

    /**
     * 分析空间标签情况
     *
     * @param spaceTagAnalyzeRequest 空间标签分析请求
     * @param loginUser              登录用户
     * @return 空间标签分析结果
     */
    List<SpaceTagAnalyzeResponse> analyzeSpaceTag(SpaceTagAnalyzeRequest spaceTagAnalyzeRequest, User loginUser);


    /**
     * 分析空间大小情况
     *
     * @param spaceSizeAnalyzeRequest 空间大小分析请求
     * @param loginUser               登录用户
     * @return 空间大小分析结果
     */
    List<SpaceSizeAnalyzeResponse> analyzeSpaceSize(SpaceSizeAnalyzeRequest spaceSizeAnalyzeRequest, User loginUser);

    /**
     * 获取空间用户分析结果
     *
     * @param spaceUserAnalyzeRequest 空间用户分析请求
     * @param loginUser               登录用户
     * @return 空间用户分析结果
     */
    List<SpaceUserAnalyzeResponse> getSpaceUserAnalyze(SpaceUserAnalyzeRequest spaceUserAnalyzeRequest, User loginUser);

    /**
     * 获取空间使用排行分析
     * @param spaceRankAnalyzeRequest 空间使用排行分析请求
     * @param loginUser 登录用户
     * @return 空间使用排行分析结果
     */
    List<Space> getSpaceRankAnalyze(SpaceRankAnalyzeRequest spaceRankAnalyzeRequest, User loginUser);
}
